home *** CD-ROM | disk | FTP | other *** search
/ GameStar 2004 April / Gamestar_61_2004-04_dvdb.iso / DVDStar / Editace / hltp.exe / {app} / Source Code / Zoners Half-Life Tools / ripent / ripent.cpp < prev    next >
C/C++ Source or Header  |  2001-04-18  |  4KB  |  185 lines

  1.  
  2. /***
  3. *
  4. *    Copyright (c) 1998, Valve LLC. All rights reserved.
  5. *    
  6. *    This product contains software technology licensed from Id 
  7. *    Software, Inc. ("Id Technology").  Id Technology (c) 1996 Id Software, Inc. 
  8. *    All Rights Reserved.
  9. *
  10. ****/
  11.  
  12. // csg4.c
  13.  
  14. #include "ripent.h"
  15.  
  16. typedef enum
  17. {
  18.     hl_undefined = -1,
  19.     hl_export = 0,
  20.     hl_import = 1
  21. }
  22. hl_types;
  23.  
  24. static hl_types g_mode = hl_undefined;
  25.  
  26. static void     ReadBSP(const char* const name)
  27. {
  28.     char            filename[_MAX_PATH];
  29.  
  30.     safe_strncpy(filename, name, _MAX_PATH);
  31.     StripExtension(filename);
  32.     DefaultExtension(filename, ".bsp");
  33.  
  34.     LoadBSPFile(name);
  35. }
  36.  
  37. static void     WriteBSP(const char* const name)
  38. {
  39.     char            filename[_MAX_PATH];
  40.  
  41.     safe_strncpy(filename, name, _MAX_PATH);
  42.     StripExtension(filename);
  43.     DefaultExtension(filename, ".bsp");
  44.  
  45.     WriteBSPFile(filename);
  46. }
  47.  
  48. static void     WriteEntities(const char* const name)
  49. {
  50.     char            filename[_MAX_PATH];
  51.  
  52.     safe_strncpy(filename, name, _MAX_PATH);
  53.     StripExtension(filename);
  54.     DefaultExtension(filename, ".ent");
  55.     unlink(filename);
  56.  
  57.     {
  58.         FILE           *f = SafeOpenWrite(filename);
  59.  
  60.         SafeWrite(f, g_dentdata, g_entdatasize);
  61.         fclose(f);
  62.     }
  63. }
  64.  
  65. static void     ReadEntities(const char* const name)
  66. {
  67.     char            filename[_MAX_PATH];
  68.  
  69.     safe_strncpy(filename, name, _MAX_PATH);
  70.     StripExtension(filename);
  71.     DefaultExtension(filename, ".ent");
  72.  
  73.     {
  74.         FILE           *f = SafeOpenRead(filename);
  75.  
  76.         g_entdatasize = q_filelength(f);
  77.         assume(g_entdatasize < sizeof(g_dentdata), "ent data filesize exceedes dentdata limit");
  78.  
  79.         SafeRead(f, g_dentdata, g_entdatasize);
  80.  
  81.         if (g_dentdata[g_entdatasize-1] != 0)
  82.         {
  83. //            Log("g_dentdata[g_entdatasize-1] = %d\n", g_dentdata[g_entdatasize-1]);
  84.             g_dentdata[g_entdatasize] = 0;
  85.             g_entdatasize++;
  86.         }
  87.         fclose(f);
  88.     }
  89. }
  90.  
  91. //======================================================================
  92.  
  93. static void     Usage(void)
  94. {
  95.     Log("%s " ZHLT_VERSIONSTRING "\n" MODIFICATIONS_STRING "\n", g_Program);
  96.     Log("  Usage: ripent [-import|-export] [-texdata n] bspname\n");
  97.     exit(1);
  98. }
  99.  
  100. /*
  101.  * ============
  102.  * main
  103.  * ============
  104.  */
  105. int             main(int argc, char** argv)
  106. {
  107.     int             i;
  108.  
  109.     g_Program = "ripent";
  110.  
  111.     if (argc == 1)
  112.     {
  113.         Usage();
  114.     }
  115.  
  116.     for (i = 1; i < argc; i++)
  117.     {
  118.         if (!strcasecmp(argv[i], "-import"))
  119.         {
  120.             g_mode = hl_import;
  121.         }
  122.         else if (!strcasecmp(argv[i], "-export"))
  123.         {
  124.             g_mode = hl_export;
  125.         }
  126.         else if (!strcasecmp(argv[i], "-texdata"))
  127.         {
  128.             if (i < argc)
  129.             {
  130.                 int             x = atoi(argv[++i]) * 1024;
  131.  
  132.                 if (x > g_max_map_miptex)
  133.                 {
  134.                     g_max_map_miptex = x;
  135.                 }
  136.             }
  137.             else
  138.             {
  139.                 Usage();
  140.             }
  141.         }
  142.         else
  143.         {
  144.             safe_strncpy(g_Mapname, argv[i], _MAX_PATH);
  145.             StripExtension(g_Mapname);
  146.             DefaultExtension(g_Mapname, ".bsp");
  147.         }
  148.     }
  149.  
  150.     if (g_mode == hl_undefined)
  151.     {
  152.         fprintf(stderr, "%s", "Must specify either -import or -export\n");
  153.         Usage();
  154.     }
  155.  
  156.     if (!q_exists(g_Mapname))
  157.     {
  158.         fprintf(stderr, "%s", "bspfile '%s' does not exist\n", g_Mapname);
  159.         Usage();
  160.     }
  161.  
  162.     dtexdata_init();
  163.     atexit(dtexdata_free);
  164.  
  165.     switch (g_mode)
  166.     {
  167.     case hl_import:
  168.         ReadBSP(g_Mapname);
  169.         ReadEntities(g_Mapname);
  170.         WriteBSP(g_Mapname);
  171.         PrintBSPFileSizes();
  172.         break;
  173.     case hl_export:
  174.         ReadBSP(g_Mapname);
  175.         PrintBSPFileSizes();
  176.         WriteEntities(g_Mapname);
  177.         break;
  178.     default:
  179.         Usage();
  180.         break;
  181.     }
  182.  
  183.     return 0;
  184. }
  185.